/**
 * 1. call方法是Function的原型上的方法，只能是函数才能调用
 * 2. call方法接收的一个参数将作为当前调用的函数的上下文,当没传递第一个参数的时候，
 *    严格模式会指向undefined，非严格模式指向全局（window或者global）
 * 3. 执行当前这个函数，并把call方法除了第一个参数之外其他参数散列传入
 * 4. 把当前这个函数执行结果返回
 */
//
 Function.prototype.myCall = function() {
   // 我们这样使用 foo.myCall()
   // myCall内部的 this指向的就是foo
   // call方法的第一个参数 context = arguments[0] || window
   // 利用对象调用方法，obj.foo(),foo里面的this指向obj
   // 我们可以构建一个 context.fn = this
   // 然后执行函数调用，context.fn(), 这里的this就指向我们传递进来的第一个参数
   // 怎么把参数散列传递给fn
   // 利用eval函数的特性，eval('console.log('+[1, 2, 3]+')') ==> console.log(1, 2, 3)
   // res = eval('context.fn('+[].slice.call(arguments, 1)+')')
   // return res;
 }